﻿/*	
*	CSSrefresh v1.0.1
*	
*	Copyright (c) 2012 Fred Heusschen
*	www.frebsite.nl
*
*	Dual licensed under the MIT and GPL licenses.
*	http://en.wikipedia.org/wiki/MIT_License
*	http://en.wikipedia.org/wiki/GNU_General_Public_License
*/

(function () {

    var phpjs = {

        array_filter: function (arr, func) {
            var retObj = {};
            for (var k in arr) {
                if (func(arr[k])) {
                    retObj[k] = arr[k];
                }
            }
            return retObj;
        },
        filemtime: function (file) {
            var headers = this.get_headers(file, 1);
            return (headers && headers['Last-Modified'] && Date.parse(headers['Last-Modified']) / 1000) || false;
        },
        get_headers: function (url, format) {
            var req = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
            if (!req) {
                throw new Error('XMLHttpRequest not supported.');
            }

            var tmp, headers, pair, i, j = 0;

            try {
                req.open('HEAD', url, false);
                req.send(null);
                if (req.readyState < 3) {
                    return false;
                }
                tmp = req.getAllResponseHeaders();
                tmp = tmp.split('\n');
                tmp = this.array_filter(tmp, function (value) {
                    return value.toString().substring(1) !== '';
                });
                headers = format ? {} : [];

                for (i in tmp) {
                    if (format) {
                        pair = tmp[i].toString().split(':');
                        headers[pair.splice(0, 1)] = pair.join(':').substring(1);
                    }
                    else {
                        headers[j++] = tmp[i];
                    }
                }

                return headers;
            }
            catch (err) {
                return false;
            }
        }
    };

    var cssRefresh = function () {

        this.reloadFile = function (links) {
            for (var a = 0, l = links.length; a < l; a++) {
                var link = links[a],
					newTime = phpjs.filemtime(this.getRandom(link.href));

                //	has been checked before
                if (link.last) {
                    //	has been changed
                    if (link.last != newTime) {
                        //	reload
                        link.elem.setAttribute('href', this.getRandom(link.href));
                    }
                }

                //	set last time checked
                link.last = newTime;
            }
            setTimeout(function () {
                this.reloadFile(links);
            }, 1000);
        };

        this.getHref = function (f) {
            return f.getAttribute('href').split('?')[0];
        };
        this.getRandom = function (f) {
            return f + '?x=' + Math.random();
        };


        var files = document.getElementsByTagName('link'),
			links = [];

        for (var a = 0, l = files.length; a < l; a++) {
            var elem = files[a],
				rel = elem.rel;
            if (typeof rel != 'string' || rel.length == 0 || rel == 'stylesheet') {
                links.push({
                    'elem': elem,
                    'href': this.getHref(elem),
                    'last': false
                });
            }
        }
        this.reloadFile(links);
    };


    cssRefresh();

})();